#!/usr/bin/env bash
set -euo pipefail

# build_binary.sh - 使用 Nuitka 构建单文件二进制
# 要求: 已安装 python3 (>=3.8) 与 gcc/clang (任一)
# 可选环境变量:
#  USE_CLANG=1        使用 clang
#  LTO=1              开启 LTO
#  STRIP=1            构建后 strip
#  OUTPUT=bind_osd_cpus  自定义输出文件名
#  VERSION_OVERRIDE=1.1.1 手动覆盖显示版本

SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
cd "$SCRIPT_DIR"

PY=python3
if ! command -v "$PY" >/dev/null 2>&1; then
  echo "python3 不存在" >&2; exit 1
fi

if ! $PY -c 'import nuitka' 2>/dev/null; then
  echo "[INFO] 安装 Nuitka..." >&2
  $PY -m pip install --upgrade nuitka >/dev/null
fi

VERSION_LINE=$($PY -c 'import re,sys;print(re.search(r"__version__\s*=\s*\"([^\"]+)\"", open("bind_osd_cpus.py").read()).group(1))')
if [[ -n "${VERSION_OVERRIDE:-}" ]]; then
  VERSION_LINE="$VERSION_OVERRIDE"
fi
OUT_NAME=${OUTPUT:-bind_osd_cpus}
OUT_DIR=dist
mkdir -p "$OUT_DIR"

NUITKA_OPTS=(--onefile --remove-output --output-filename="$OUT_NAME" )

if [[ "${USE_CLANG:-}" == 1 ]]; then
  NUITKA_OPTS+=(--clang)
fi
if [[ "${LTO:-}" == 1 ]]; then
  NUITKA_OPTS+=(--lto=yes)
fi
# 我们没有额外依赖, 允许默认跟踪标准库即可

set -x
$PY -m nuitka "${NUITKA_OPTS[@]}" bind_osd_cpus.py
set +x

BIN="$OUT_NAME"
if [[ ! -x "$BIN" ]]; then
  echo "构建失败: 未生成可执行文件 $BIN" >&2; exit 1
fi

if [[ "${STRIP:-}" == 1 && -x /usr/bin/strip ]]; then
  echo "[INFO] strip 二进制..."
  /usr/bin/strip "$BIN" || true
fi

mv "$BIN" "$OUT_DIR/"
sha256sum "$OUT_DIR/$OUT_NAME" | tee "$OUT_DIR/$OUT_NAME.sha256"

echo "\n完成: $OUT_DIR/$OUT_NAME (版本: $VERSION_LINE)"
